home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / CHKBOOK.PAK / CHKBOOK.CPP < prev    next >
C/C++ Source or Header  |  1997-05-06  |  8KB  |  246 lines

  1. // chkbook.cpp : Defines the class behaviors for the application.
  2. //
  3. // This is a part of the Microsoft Foundation Classes C++ library.
  4. // Copyright (C) 1992-1995 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Microsoft Foundation Classes Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Microsoft Foundation Classes product.
  12.  
  13. #include "stdafx.h"
  14. #include "chkbook.h"
  15.  
  16. #ifdef _DEBUG
  17. #undef THIS_FILE
  18. static char BASED_CODE THIS_FILE[] = __FILE__;
  19. #endif
  20.  
  21. /////////////////////////////////////////////////////////////////////////////
  22. // CChkBookApp
  23.  
  24. BEGIN_MESSAGE_MAP(CChkBookApp, CWinApp)
  25.     //{{AFX_MSG_MAP(CChkBookApp)
  26.     ON_COMMAND(ID_FILE_NEW, OnFileNew)
  27.     ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
  28.     //}}AFX_MSG_MAP
  29.     // Standard file based document commands
  30.     ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
  31.     // Standard print setup command
  32.     ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
  33. END_MESSAGE_MAP()
  34.  
  35. /////////////////////////////////////////////////////////////////////////////
  36. // CChkBookApp construction
  37. // Place all significant initialization in InitInstance
  38.  
  39. CChkBookApp::CChkBookApp()
  40. {
  41. }
  42.  
  43. /////////////////////////////////////////////////////////////////////////////
  44. // The one and only CChkBookApp object
  45.  
  46. CChkBookApp theApp;
  47.  
  48. /////////////////////////////////////////////////////////////////////////////
  49. // CChkBookApp initialization
  50.  
  51. BOOL CChkBookApp::InitInstance()
  52. {
  53.     // Standard initialization
  54.  
  55.     Enable3dControls();     // Use 3d controls in dialogs
  56.  
  57.     LoadStdProfileSettings();
  58.  
  59.     // We create two doc template objects to orchestrate the creation of two
  60.     // distinct MDI children-hosted views of the document: (1) the check
  61.     // check view and (2) the book view.
  62.     //
  63.     // We register both doc templates with the CWinApp object, by calling
  64.     // AddDocTemplate.  However, if we were to do this and nothing else, then
  65.     // the framework would mistakenly believe that the application supports
  66.     // two document types.  The framework would display a File New dialog
  67.     // that lists two document types, both which would be "Check Book".
  68.     // We avoid this problem by removing the third string from
  69.     // the document template for the check frame/view.  Specifically,
  70.     // the strings for documents IDR_BOOKFRAME and IDR_CHECKFRAME are,
  71.     // respectively:
  72.     //
  73.     //       "Book\nchecks\nCheck Book\n
  74.     //        Check Book File (*.chb)\n.chb\n
  75.     //        ChkBookFileType\nCheck Book File Type"
  76.     // and
  77.     //       "Check\nchecks\n\n
  78.     //        Check Book File (*.chb)\n.chb\n
  79.     //        ChkBookFileType\nCheck Book File Type"
  80.     //
  81.     // Finding no GetDocString(CDocTemplate::fileNewName) for the
  82.     // second document template, CWinApp concludes that there is only
  83.     // one document type supported by the application (the "Check Book"
  84.     // document type specified in the first document template; and
  85.     // therefore does not represent the user with a File New dialog.
  86.  
  87.     m_pBookViewTemplate = new CMultiDocTemplate(IDR_BOOKFRAME,
  88.             RUNTIME_CLASS(CChkBookDoc),
  89.             RUNTIME_CLASS(CCheckBookFrame),
  90.             RUNTIME_CLASS(CBookView));
  91.     AddDocTemplate(m_pBookViewTemplate);
  92.  
  93.     m_pCheckViewTemplate = new CMultiDocTemplate(IDR_CHECKFRAME,
  94.             RUNTIME_CLASS(CChkBookDoc),
  95.             RUNTIME_CLASS(CCheckBookFrame),
  96.             RUNTIME_CLASS(CCheckView));
  97.     AddDocTemplate(m_pCheckViewTemplate);
  98.  
  99.     // Create the main MDI frame window.
  100.  
  101.     CMainFrame* pMainFrame = new CMainFrame;
  102.     if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
  103.         return FALSE;
  104.  
  105.     // The following reflects an optional user interface design
  106.     // decision to automatically maximize the main application window
  107.     // upon start-up.
  108.     pMainFrame->ShowWindow(SW_SHOWMAXIMIZED);
  109.  
  110.     pMainFrame->UpdateWindow();
  111.     m_pMainWnd = pMainFrame;
  112.  
  113. #ifndef _MAC
  114.     if (m_lpCmdLine[0] == '\0')
  115.     {
  116.         // Open file name saved in private INI file.
  117.         CString strDocPath = GetDocPathFromIniFile();
  118.         if (!strDocPath.IsEmpty())
  119.             OpenDocumentFile(strDocPath);
  120.     }
  121.     else
  122.     {
  123.         OpenDocumentFile(m_lpCmdLine);
  124.     }
  125. #endif
  126.  
  127.     return TRUE;
  128. }
  129.  
  130. #ifdef _MAC
  131. BOOL CChkBookApp::CreateInitialDocument()
  132. {
  133.     // Open file name saved in private INI file.
  134.     CString strDocPath = GetDocPathFromIniFile();
  135.     if (!strDocPath.IsEmpty())
  136.         return OpenDocumentFile(strDocPath) != NULL;
  137.     else
  138.         return CWinApp::CreateInitialDocument();
  139. }
  140. #endif
  141.  
  142. /////////////////////////////////////////////////////////////////////////////
  143. // Overrides
  144.  
  145. void CChkBookApp::OnFileNew()
  146. {
  147.     // By default, the framework does not create an actual file for
  148.     // a new document until the user does a File Save As.  But ChkBook
  149.     // requires a file as soon as the user does a File New, because
  150.     // ChkBook updates the file on a per transaction basis.  Upon File
  151.     // New, we prompt the user with a File Open dialog, in which the
  152.     // user specifies a new file (or if she changes her mind, she
  153.     // can specify an existing check book file).  We call the same
  154.     // CWinApp::DoPromptFileName that CWinApp::OnFileOpen calls.
  155.     // But we replace the OFN_FILEMUSTEXIST flag with
  156.     // OFN_CREATEPROMPT.
  157.  
  158.     CString strNewFileName;
  159.  
  160. #ifndef _MAC
  161.     if (!(DoPromptFileName(strNewFileName, IDS_NEW_CHECKBOOK,
  162.             OFN_HIDEREADONLY | OFN_CREATEPROMPT, TRUE, NULL)))
  163.         return;
  164. #else
  165.     if (!(DoPromptFileName(strNewFileName, IDS_NEW_CHECKBOOK,
  166.             OFN_HIDEREADONLY | OFN_CREATEPROMPT, FALSE, NULL)))
  167.         return;
  168. #endif
  169.  
  170.     // If file doesn't already exist, then create it.
  171.     CFile file;
  172.     CFileStatus status;
  173.     if (!file.GetStatus(strNewFileName, status))
  174.     {
  175.         if (!file.Open(strNewFileName, CFile::modeCreate))
  176.         {
  177.             CString strMessage;
  178. #ifndef _MAC
  179.             AfxFormatString1(strMessage, IDS_CANNOT_CREATE_CHECKBOOK,
  180.                 strNewFileName);
  181. #else
  182.             TCHAR szFileTitle[64];
  183.             ::GetFileTitle(strNewFileName, szFileTitle, sizeof(szFileTitle)/sizeof(TCHAR));
  184.             AfxFormatString1(strMessage, IDS_CANNOT_OPEN_CHECKBOOK, szFileTitle);
  185. #endif
  186.             AfxMessageBox(strMessage);
  187.             return;
  188.         }
  189.         file.Close();
  190.     }
  191.  
  192.     // Open the file now that it has been created.
  193.     OpenDocumentFile(strNewFileName);
  194. }
  195.  
  196. CDocument* CChkBookApp::OpenDocumentFile(LPCTSTR lpszFileName)
  197. {
  198.     // CWinApp::OpenDocmentFile creates the first MDI child window
  199.     // for the book view.  This override creates the second MDI child
  200.     // window for the check view.  Then it tiles the two MDI children
  201.     // windows.
  202.  
  203.     CChkBookDoc* pDoc = (CChkBookDoc*)CWinApp::OpenDocumentFile(lpszFileName);
  204.     if (pDoc == NULL)
  205.         return NULL;
  206.  
  207.     CFrameWnd* pNewFrame = m_pCheckViewTemplate->CreateNewFrame(pDoc, NULL);
  208.     if (pNewFrame == NULL)
  209.         return pDoc;
  210.  
  211.     m_pCheckViewTemplate->InitialUpdateFrame(pNewFrame, pDoc);
  212.  
  213.     // Tile the two MDI children windows within the MDI frame window.
  214.     ASSERT_KINDOF(CMDIChildWnd, pNewFrame);
  215.     CMDIFrameWnd* pMDIFrameWnd = ((CMDIChildWnd*)pNewFrame)->GetMDIFrame();
  216.     ASSERT(pMDIFrameWnd != NULL);
  217.     pMDIFrameWnd->MDITile(MDITILE_HORIZONTAL);
  218.  
  219.     return pDoc;
  220. }
  221.  
  222. /////////////////////////////////////////////////////////////////////////////
  223. // INI file implementation
  224.  
  225. static TCHAR BASED_CODE szIniFileSection[] = _T("Most Recent Check Book File");
  226. static TCHAR BASED_CODE szIniFileEntry[] = _T("File");
  227.  
  228. void CChkBookApp::UpdateIniFileWithDocPath(LPCTSTR lpszPathName)
  229. {
  230.     WriteProfileString(szIniFileSection, szIniFileEntry, lpszPathName);
  231. }
  232.  
  233. CString CChkBookApp::GetDocPathFromIniFile()
  234. {
  235.     return GetProfileString(szIniFileSection, szIniFileEntry, NULL);
  236. }
  237.  
  238. /////////////////////////////////////////////////////////////////////////////
  239. // CChkBookApp commands
  240.  
  241. void CChkBookApp::OnAppAbout()
  242. {
  243.     CDialog dlg(IDD_ABOUTBOX);
  244.     dlg.DoModal();
  245. }
  246.